 <?PHP
require_once _DIRETORIO_BACKEND_._SEPARADOR_DIRETORIO_.'db.php';
require_once _DIRETORIO_BACKEND_VO_._SEPARADOR_DIRETORIO_.'VOcidade_has_endereco.php';
require_once _DIRETORIO_BACKEND_DB_._SEPARADOR_DIRETORIO_.'Paginacao.php';
/**
* Esta Classe é responsável por inserir ou atualizar um registro de cidade.
* @name DBcidade_has_endereco
* @version 0.1
* @access public
* @package DB
**/
abstract Class DBcidade_has_endereco{
	/**
	 * Método responsável por retornar os dados. 
	 * @param int $idCidade
	 * @access public
	 * @return oVO cidade
	 */
	public function getByID($idCidade,$idEndereco){
            $DB= new DB();
            $dbh = $DB->conec();
            $oVO = new VOcidade_has_endereco();
            try{
                $sql = "SELECT * FROM CIDADE_has_ENDERECO WHERE idCidade =:idCidade AND idEndereco =:idEndereco";
                $stmt = $dbh->prepare($sql);
                $stmt->bindParam (':idCidade',$idCidade,PDO::PARAM_INT);
                $stmt->bindParam (':idEndereco',$idEndereco,PDO::PARAM_INT);
                $stmt->execute();
                $oVO = $stmt->fetch(PDO::FETCH_OBJ);
            } 
            catch(PDOException $e){
                $DB->DBerror($e,$sql);
            }
            return $oVO;
	}
	/**
	 * Método responsável por montar um Sql de busca. 
	 * @param objeto $oVO 
	 * @param $pag 
	 * @access public
	 * @return resultado da Busca.
	 */
	public function get($oVO,$pag,$limitePagina){	
            $DB = new DB();
            $dbh = $DB->conec();		
            if(!isset($first)){$first = false;}
            try{
                $sql = "SELECT * FROM CIDADE_has_ENDERECO";

                if(!empty($oVO->idEndereco)){
                       $sql.=$this->getSQLFirst($first)."idEndereco =:idEndereco" ;
                }
                if(!empty($oVO->idCidade)){
                       $sql.=$this->getSQLFirst($first)."idCidade =:idCidade" ;
                }
                if(isset($pag)){
                       $pg1 = ($limitePagina*($pag-1));
                       $sql.=" limit ".$pg1." , ".$limitePagina;
                }
                $stmt = $dbh->prepare($sql);
                if(!empty($oVO->idEndereco)){                           
                       $stmt->bindParam(':idEndereco',$oVO->idEndereco,PDO::PARAM_INT);
                }
                if(!empty($oVO->idCidade)){                           
                       $stmt->bindParam(':idCidade',$oVO->idCidade,PDO::PARAM_INT);
                }	  	  	 
                $stmt->execute();
                $result = $stmt->fetchAll(PDO::FETCH_CLASS,"VOcidade_has_endereco");
            }
            catch (PDOException $e){
                     $DB->DBerror($e, $sql);
            }
            return $result;
	}
	
  	/**
	 * Método responsável por adicionar à string do SQl a clausula WHERE ou AND. 
	 * @param boolean $first 
	 * @access public
	 * @return Where ou AND.
	 */
	public function getSqlFirst(&$first){
	    $return = " AND ";
	    if($first){$return=" WHERE ";$first=true;}
	    return($return);
	}
	
   	/**
	 * Método responsável por inserir ou atulizar um registro. 
	 * @param objeto $oVO 
	 * @access public
	 */	
	public function save($oVO){
            $oVOcompare = $this->getByID($oVO->idCidade,$oVO->idEndereco);
            $DB = new DB();
            $dbh = $DB->conec();
            if(isset($oVOcompare)){
                if( ($oVOcompare->idCidade != $oVO->idCidade) | ($oVOcompare->idEndereco != $oVO->idEndereco) ){
                    $sql = "UPDATE CIDADE_has_ENDERECO SET idCidade =:idCidade, idEndereco =:idEndereco";
                }
            }
             else {
                $sql = "INSERT INTO CIDADE_has_ENDERECO (idCidade,idEndereco) VALUES (:idCidade,:idEndereco)";
            }
            $stmt = $dbh->prepare($sql);
            $stmt->bindParam(':idCidade',$oVO->idCidade,PDO::PARAM_INT);
            $stmt->bindParam(':idEndereco',$oVO->idEndereco,PDO::PARAM_INT);
            $stmt->execute(); 
	}
		
	/**
	 * Método responsável por deletar um registro. 
	 * @param int $idCidade
	 * @access public
	 */
	public function delete($idCidade,$idEndereco){			
            $DB = new DB();
            $dbh = $DB->conec();
            $sql = "DELETE FROM CIDADE_has_ENDERECO WHERE idCidade=:idCidade AND idEndereco=:idEndereco";
            $stmt = $dbh->prepare($sql);
            $stmt->bindParam(':idCidade',$idCidade,PDO::PARAM_INT);
            $stmt->bindParam(':idEndereco',$idEndereco,PDO::PARAM_INT);
            $stmt->execute();
	}

}
